草庐IT

c++ - QML Qt openUrlExternally

全部标签

c++ - 如何摆脱空指针

我继承了一个最初用C编写的大型应用程序(但同时也向其中添加了很多C++)。由于历史原因,该应用程序包含大量空指针。在你开始窒息之前,让我解释一下为什么这样做。应用程序包含许多不同的数据结构,但它们存储在“通用”容器中。现在我会为它使用模板化的STL容器,或者我会给所有数据结构一个公共(public)基类,这样容器就可以存储指向基类的指针,但是在[好?]旧的C时代,唯一的解决方案是将结构指针转换为空指针。此外,还有很多代码处理这些空指针,并使用非常奇怪的C构造来模拟C中的多态性。我现在正在修改应用程序,并试图摆脱void-pointers。向所有数据结构添加一个公共(public)基类并

c++ - 错误 C2504 : 'BASECLASS' : base class undefined

我查看了一个与此类似的帖子,但链接不同,问题从未得到解决。我的问题是,出于某种原因,链接器期望有一个基类的定义,但基类只是一个接口(interface)。以下是完整的错误c:\users\numerical25\desktop\introtodirectx\godfiles\gxrendermanager\gxrendermanager\gxrendermanager\gxdx.h(2):errorC2504:'GXRenderer':baseclassundefined下面是显示标题如何相互链接的代码GXRenderManager.h#ifndefGXRM#defineGXRM#in

c++ - vim在现有或新标签页打开编译报错

当我从VIM编译或运行文件时,所有错误引用都在最后一个事件缓冲区中打开,无论该文件是否已经在另一个vim选项卡中打开。这种行为非常烦人。有没有办法强制vim在编译错误时表现得像':tabdrop'?(参见http://vim.wikia.com/wiki/Edit_a_file_or_jump_to_it_if_already_open)非常感谢任何提示! 最佳答案 您正在寻找'switchbuf'选项。如果您设置switchbuf=useopen,usetab,newtab,那么任何已经显示错误缓冲区的窗口/选项卡都将被聚焦。如果

c++ - 具有分层访问控制的存储库的 SVN 或 Git

对于开发人员只需要访问存储库特定部分的商业项目,您推荐哪一个?开发IDE是Eclipse编程语言为C/C++需求的主要特征是:对存储库的权威和ACL分层访问 最佳答案 Git,结合使用Gitolite管理的“中央”服务器,可以提供您需要的所有细粒度控制(每个用户/每个组,可以访问全部或部分repo,甚至只能访问某些分支)。也就是说,如果您的开发人员更熟悉像SVN这样的CVCS,那么至少在启动项目时使用这些知识可能更明智(并在您的apache服务器配置中使用身份验证方法):CVCScanbequitedifferentfromaDVC

c++ - valgrind 在使用 https 时报告 libcurl 的问题

所以我有一个通过https与facebook服务器通信的非常基本的示例,但valgrind正在提示。所以我假设我没有设置错误...有人知道我做错了什么吗?这是我的代码:#include#include#includesize_twrite_fn_impl(void*ptr,size_tsize,size_tnmemb,void*data){std::string*result=static_cast(data);*result+=std::string((char*)ptr,size*nmemb);returnsize*nmemb;}intmain(){std::stringurl_f

c++ - 错误 : invalid conversion from 'void (*)()' to 'void (*)()' -- what?

我正在尝试将回调函数从C++传递到OpenGL(CAPI):gluQuadricCallback(qobj,GLU_ERROR,errorCallback);其中errorCallback是编译为C++代码的文件中的函数,声明为voiderrorCallback();代码在Linux上使用g++4.4编译干净,但在Windows上使用mingw32g++4.4时出现以下错误:..\glwidget.cpp:172:error:invalidconversionfrom'void(*)()'to'void(*)()'..\glwidget.cpp:172:error:initializi

c++ - 链接到 C++ 库时在 C 中使用 setjmp 和 longjmp

我想在C程序中使用setjmp和longjmp,该程序链接到用C++实现的库(但具有CAPI)。C++代码确实进行动态内存分配并通过API传递指针,但只要代码的C端正确管理那些(不透明的)对象,使用longjmp时就不应该出现任何困惑,对吧?我知道在C++代码中使用这些函数不安全,但在链接到C++代码的C代码中应该安全吗? 最佳答案 您从C代码调用C++函数这一事实并不会使setjmp和longjmp比以往更不安全。重要的是,如果您的库分配资源,您必须准备好恢复代码,以确保在调用longjmp后正确释放这些资源。虽然这对于您自己的分

c++ - 我是否正确理解 C/C++ 严格别名?

我读过thisarticleaboutC/C++strictaliasing.我认为这同样适用于C++。据我了解,严格别名用于重新排列代码以实现性能优化。这就是为什么两个不同(在C++情况下不相关)类型的指针不能引用相同的内存位置。这是否意味着只有修改内存才会出现问题?除了可能的问题withmemoryalignment.例如,处理网络协议(protocol),或反序列化。我有一个字节数组,动态分配并且数据包结构正确对齐。我可以reinterpret_cast它到我的数据包结构吗?charconst*buf=...;//dynamicallyallocatedunsignedinti=

c++ - 在不同平台上通过管道传输数据的最佳和安全方式

目前我正面临一个问题,我正在通过从x64arch到x86arch的管道传递缓冲区对象。该对象还包含一些指针值,在x64中为8个字节,而在x86中相同的指针大小为4个字节。现在,当我通过管道传输对象时,它的大小比x86平台对同一对象的预期大一点(因为这里的指针大小更小)。我可以从这个论坛的类似帖子中了解到我可能需要使用序列化,但我不知道如何使用,因为我以前从未使用过序列化。序列化会解决这个问题吗?我正在使用带有GCC编译器的C++。我希望该产品适用于所有架构(ia64、x64或x86)。 最佳答案 指针是指向本地运行程序*中内存位置的

c++ - 关于 main 函数的命令行参数

它看起来像intmain(intargc,char*argv[]);。我的问题是:1我可以在argv[]中添加多少个数组项?2每个char*的最大大小是多少? 最佳答案 你可以试试:$getconfARG_MAX2180000http://pubs.opengroup.org/onlinepubs/007904975/basedefs/limits.h.htmlARG_MAXismaximumlengthofargumenttotheexecfunctionsincludingenvironmentdata.也就是说,对参数的数量或